spec:
  versions:
    - name: v1alpha1
      schema:
        openAPIV3Schema:
          description: |
            Custom resource для описания источника логов в log-pipeline.

            Каждый custom resource `PodLoggingConfig` описывает правила сбора логов из указанного namespace.
          properties:
            spec:
              properties:
                labelSelector:
                  description: |
                    Задает фильтр по меткам пода.

                    Подробнее про выражения можно узнать [в документации](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/).
                  properties:
                    matchLabels:
                      description: Список меток, которые должен иметь под, чтобы подпадать под условие фильтра.
                    matchExpressions:
                      description: Список выражений для меток, которые должен иметь под, чтобы подпадать под условие фильтра.
                      items:
                        properties:
                          key:
                            description: Имя метки.
                          operator:
                            description: Оператор сравнения.
                          values:
                            description: Значение метки.
                labelFilter:
                  description: |
                    Список правил для фильтрации логов по их меткам метаданных](./#метаданные).
                  items:
                    properties:
                      field:
                        description: |
                          Имя метки для использования в фильтре.

                          Не должно быть пустым.
                      operator:
                        description: |
                          Оператор, который можно применить для фильтрации:
                          * `In` — ищет сроку или элемент в массиве;
                          * `NotIn` — является инверсией оператора `In`;
                          * `Regex` — пытается проверить строку в поле с использованием регулярного выражения (только логи, в которых есть поля, подпадающие под регулярное выражение, пройдут в хранилище);
                          * `NotRegex` — является инверсией оператора `Regex` (в хранилище попадут логи, в которых нет поля или же оно не подпадает под регулярное выражение);
                          * `Exists` — проверяет наличие поля и пропускает логи, только если поле есть;
                          * `DoesNotExist` — проверяет наличие поля и пропускает логи, только если поле отсутствует.
                      values:
                        description: |
                          Массив значений или регулярных выражений для соответствующих операций. Не работает для операций `Exists` и `DoesNotExist`.

                          Можно использовать целые числа или строки. Поля с числами с плавающей запятой и поля логического типа будут преобразованы в строки при сравнении.
                logFilter:
                  description: |
                    Список фильтров для логов, которые применяются к полям сообщения в формате JSON.

                    Только логи, подпавшие под правила, будут сохранены в хранилище.
                  items:
                    properties:
                      field:
                        description: Имя поля для фильтрации. Должно быть пустым для логов не в JSON-формате.
                      operator:
                        description: |
                          Оператор, который можно применить для фильтрации:
                          * `In` — ищет сроку или элемент в массиве;
                          * `NotIn` — является инверсией оператора `In`;
                          * `Regex` — пытается проверить строку в поле с использованием регулярного выражения (только логи, в которых есть поля, подпадающие под регулярное выражение, пройдут в хранилище);
                          * `NotRegex` — является инверсией оператора `Regex` (в хранилище попадут логи, в которых нет поля или же оно не подпадает под регулярное выражение);
                          * `Exists` — проверяет наличие поля и пропускает логи, только если поле есть;
                          * `DoesNotExist` — проверяет наличие поля и пропускает логи, только если поле отсутствует.
                      values:
                        description: |
                          Массив значений или регулярных выражений для соответствующих операций. Не работает для операций `Exists` и `DoesNotExist`.

                          Можно использовать целые числа или строки. Поля с числами с плавающей запятой и поля логического типа будут преобразованы в строки при сравнении.
                multilineParser:
                  description: Список паттернов для определения многострочных логов.
                  properties:
                    type:
                      description: |
                        Типы парсеров:
                        * `None` — не парсить логи;
                        * `General` — парсер, который пытается сливать логи, у которых в начале сообщения стоит пробел или табуляция;
                        * `Backslash` — парсер, который парсит многострочные логи в SHELL-формате с обратным слэшем у строк одного сообщения;
                        * `LogWithTime` — парсер, который ожидает, что любое новое сообщение начинается с временной метки;
                        * `MultilineJSON` — простой парсер JSON-логов, который предполагает, что новое сообщение начинается с символа `{`;
                        * `Custom` - парсер, который парсит многострочные логи в указанном пользователем  в `spec.multilineParser.custom` формате.
                    custom:
                      description: Правила парсинга многострочных логов для парсера `Custom`.
                      properties:
                        startsWhen:
                          description: |
                            Условие, при котором находится первая строчка многострокового лога.
                          properties:
                            notRegex:
                              description: Регулярное выражение, которое считает мэтчем строки, НЕ попавшие в него.
                            regex:
                              description: Регулярное выражение, которое считает мэтчем строки, попавшие в него.
                        endsWhen:
                          description: |
                            Условие, при котором находится последняя строчка многострокового лога.
                          properties:
                            notRegex:
                              description: Регулярное выражение, которое считает мэтчем строки, НЕ попавшие в него.
                            regex:
                              description: Регулярное выражение, которое считает мэтчем строки, попавшие в него.
                clusterDestinationRefs:
                  description: Список бэкендов хранения (CRD `ClusterLogDestination`), в которые будет отправлено сообщение.
